﻿Imports System.Xml
Imports System.Text.RegularExpressions
Imports WSEntidades

Public Class SorianaReverse

#Region "Metodos_Validacion"
    Public Function isValid_Remision(ByRef Resp As List(Of RespuestaPremium), _
                                       ByVal AddSR As SR.AddSorianaReverse.DocumentoFacturaSorianaReverse) As Boolean
        Dim msgError As String = ""
        Try
            'REMISION
            If (AddSR.Id = "") Then
                msgError &= "Indique el Id de la Remisión." & vbCrLf
            End If

            If (AddSR.RowOrder = "") Then
                msgError &= "Indique el RowOrder de la Remisión." & vbCrLf
            End If

            If (AddSR.Proveedor = "") Then
                msgError &= "Indique el Proveedor." & vbCrLf
            ElseIf Not (IsNumeric(AddSR.Proveedor)) Then
                msgError &= "El Proveedor debe ser numérico." & vbCrLf
            End If

            If (AddSR.Remision = "") Then
                msgError &= "Indique la Remisión." & vbCrLf
            ElseIf (AddSR.Remision.Length > 20) Then
                msgError &= "La Remisión debe ser de longitud máxima 20." & vbCrLf
            End If

            If (AddSR.Consecutivo = "") Then
                msgError &= "Indique el Consecutivo de Remisión." & vbCrLf
            End If

            If (AddSR.FechaRemision = "") Then
                msgError &= "Indique la Fecha de Remisión." & vbCrLf
            ElseIf (AddSR.FechaRemision.Length > 25) Then
                msgError &= "La Fecha de Remisión debe ser de longitud máxima 25"
            Else
                Try
                    Convert.ToDateTime(AddSR.FechaRemision)
                Catch ex As Exception
                    msgError &= "La Fecha de Remisión no tiene un formato correcto." & vbCrLf
                End Try
            End If

            If (AddSR.Tienda = "") Then
                msgError &= "Indique la Tienda de Remisión." & vbCrLf
            ElseIf Not (IsNumeric(AddSR.Tienda)) Then
                msgError &= "La Tienda debe ser numérico."
            End If

            If (AddSR.TipoMoneda = "") Then
                msgError &= "Indique el Tipo de Moneda de Remisión." & vbCrLf
            ElseIf Not (IsNumeric(AddSR.TipoMoneda)) Then
                msgError &= "El tipo de Moneda debe ser numérico." & vbCrLf
            End If

            If (AddSR.TipoBulto = "") Then
                msgError &= "Indique el Tipo de Bulto de Remisión." & vbCrLf
            End If

            If (AddSR.EntregaMercancia = "") Then
                msgError &= "Indique la Entrega de Mercancia de Remisión." & vbCrLf
            ElseIf Not (IsNumeric(AddSR.EntregaMercancia)) Then
                msgError &= "La Entrega de Mercancia de Remisión debe ser numérica." & vbCrLf
            End If

            If (AddSR.CantidadBultos = "") Then
                msgError &= "Indique la Cantidad de Bultos de Remisión." & vbCrLf
            ElseIf Not (IsNumeric(AddSR.CantidadBultos)) Then
                msgError &= "La Cantidad de Bultos de Remisión debe ser numérico." & vbCrLf
            End If

            If (AddSR.Subtotal = "") Then
                msgError &= "Indique el Subtotal de Remisión." & vbCrLf
            ElseIf Not (IsNumeric(AddSR.Subtotal)) Then
                msgError &= "El Subtotal de Remisión debe ser numérico." & vbCrLf
            End If

            If (AddSR.Descuentos = "") Then
                msgError &= "Indique los Descuentos de Remisión." & vbCrLf
            ElseIf Not (IsNumeric(AddSR.Descuentos)) Then
                msgError &= "Los Descuentos de Remisión debe ser numérico." & vbCrLf
            End If

            If (AddSR.IEPS = "") Then
                msgError &= "Indique el IEPS de Remisión." & vbCrLf
            ElseIf Not (IsNumeric(AddSR.IEPS)) Then
                msgError &= "El IEPS de Remisión debe ser numérico."
            End If

            If (AddSR.IVA = "") Then
                msgError &= "Indique el IVA de Remisión." & vbCrLf
            ElseIf Not (IsNumeric(AddSR.IVA)) Then
                msgError &= "El IVA de Remisión debe ser numérico." & vbCrLf
            End If

            If (AddSR.OtrosImpuestos = "") Then
                msgError &= "Indique Otros Impuestos de Remisión." & vbCrLf
            ElseIf Not (IsNumeric(AddSR.OtrosImpuestos)) Then
                msgError &= "Otros Impuestos de Remisión debe ser numérico." & vbCrLf
            End If

            If (AddSR.Total = "") Then
                msgError &= "Indique el Total de Remisión." & vbCrLf
            ElseIf Not (IsNumeric(AddSR.Total)) Then
                msgError &= "El Total de Remisión debe ser numérico." & vbCrLf
            End If

            If (AddSR.CantidadPedidos = "") Then
                msgError &= "Indique la Cantidad de Pedidos de Remisión." & vbCrLf
            ElseIf Not (IsNumeric(AddSR.CantidadPedidos)) Then
                msgError &= "La Cantidad de Pedidos de Remisión debe ser numérica." & vbCrLf
            End If

            If (AddSR.FechaEntregaMercancia = "") Then
                msgError &= "Indique la Fecha de Entrega de Mercancia." & vbCrLf
            ElseIf (AddSR.FechaEntregaMercancia.Length > 25) Then
                msgError &= "La Fecha de Entrega de Mercancia debe ser de longitud máxima de 25." & vbCrLf
            Else
                Try
                    Convert.ToDateTime(AddSR.FechaEntregaMercancia)
                Catch ex As Exception
                    msgError &= "La Fecha de Entrega de Mercancia no tiene un formato correcto." & vbCrLf
                End Try
            End If

            If (AddSR.Cita <> "") Then
                If (AddSR.Cita.Length > 20) Then
                    msgError &= "La Cita debe ser de longitud máxima de 20." & vbCrLf
                End If
            End If

            If (msgError = "") Then
                isValid_Remision = True
            Else
                isValid_Remision = False
                ValidaCFDi.AgregaRespuesta("08", 0, msgError, Resp)
            End If
        Catch ex As Exception
            isValid_Remision = False
            ValidaCFDi.AgregaRespuesta("08", 0, ex.Message, Resp)
        End Try
    End Function

    Public Function isValid_Pedimento(ByRef Resp As List(Of RespuestaPremium), _
                                   ByVal AddSR As SR.AddSorianaReverse.DocumentoFacturaSorianaReverse) As Boolean
        Dim msgError As String = ""
        Try
            'PEDIMENTO
            If (AddSR.IdPedimento = "") Then
                msgError &= "Indique el Id de Remision del Pedimento." & vbCrLf
            End If

            If (AddSR.RowOrderPedimento = "") Then
                msgError &= "Indique el Row Order del Pedimento." & vbCrLf
            ElseIf Not (IsNumeric(AddSR.RowOrderPedimento)) Then
                msgError &= "El Row Order del Pedimento debe ser numérico." & vbCrLf
            End If

            If (AddSR.Pedimento = "") Then
                msgError &= "Indique el Pedimento." & vbCrLf
            ElseIf (AddSR.Pedimento.Length > 15) Then
                msgError &= "El Pedimento debe ser de longitud máxima de 15." & vbCrLf
            ElseIf Not (IsNumeric(AddSR.Pedimento)) Then
                msgError &= "El Pedimento debe ser numérico." & vbCrLf
            End If

            If (AddSR.Aduana = "") Then
                msgError &= "Indique la Aduana." & vbCrLf
            ElseIf Not (IsNumeric(AddSR.Aduana)) Then
                msgError &= "La Aduana debe ser numérica." & vbCrLf
            End If

            If (AddSR.AgenteAduanal = "") Then
                msgError &= "Indique el Agente Aduanal." & vbCrLf
            ElseIf Not (IsNumeric(AddSR.AgenteAduanal)) Then
                msgError &= "El Agente Aduanal debe ser numérico." & vbCrLf
            End If

            If (AddSR.TipoPedimento = "") Then
                msgError &= "Indique el Tipo de Pedimento." & vbCrLf
            ElseIf Not (IsNumeric(AddSR.TipoPedimento)) Then
                msgError &= "El Tipo de Pedimento debe ser numérico." & vbCrLf
            End If

            If (AddSR.FechaPedimento = "") Then
                msgError &= "Indique la Fecha de Pedimento"
            ElseIf (AddSR.FechaPedimento.Length > 25) Then
                msgError &= "La Fecha de Pedimento debe ser de longitud máxima de 25." & vbCrLf
            Else
                Try
                    Convert.ToDateTime(AddSR.FechaPedimento)
                Catch ex As Exception
                    msgError &= "La Fecha de Pedimento no tiene un formato correcto." & vbCrLf
                End Try
            End If

            If (AddSR.FechaReciboLaredo = "") Then
                msgError &= "Indique la Fecha de Recibo Laredo."
            ElseIf (AddSR.FechaPedimento.Length > 25) Then
                msgError &= "La Fecha de Recibo Laredo debe ser de longitud máxima de 25." & vbCrLf
            Else
                Try
                    Convert.ToDateTime(AddSR.FechaReciboLaredo)
                Catch ex As Exception
                    msgError &= "La Fecha de Recibo Laredo no tiene un formato correcto." & vbCrLf
                End Try
            End If

            If (AddSR.FechaBillOfLading = "") Then
                msgError &= "Indique la Fecha de Bill of Lading."
            ElseIf (AddSR.FechaBillOfLading.Length > 25) Then
                msgError &= "La Fecha de Bill of Lading debe ser de longitud máxima de 25." & vbCrLf
            Else
                Try
                    Convert.ToDateTime(AddSR.FechaBillOfLading)
                Catch ex As Exception
                    msgError &= "La Fecha de Bill of Lading no tiene un formato correcto." & vbCrLf
                End Try
            End If


            If (msgError = "") Then
                isValid_Pedimento = True
            Else
                isValid_Pedimento = False
                ValidaCFDi.AgregaRespuesta("08", 0, msgError, Resp)
            End If
        Catch ex As Exception
            isValid_Pedimento = False
            ValidaCFDi.AgregaRespuesta("08", 0, ex.Message, Resp)
        End Try
    End Function

    Public Function isValid_Pedidos(ByRef Resp As List(Of RespuestaPremium), _
                                      ByVal AddSR As SR.AddSorianaReverse.DocumentoFacturaSorianaReverse, _
                                      ByVal i As Integer) As Boolean
        Dim msgError As String = ""
        Try
            'PEDIDOS
            If (AddSR.Pedidos(i).IdPedido = "") Then
                msgError &= "Indique el Id. (Pedido:" & i & ")" & vbCrLf
            End If

            If (AddSR.Pedidos(i).RowOrderPedido = "") Then
                msgError &= "Indique el RowOrder. (Pedido:" & i & ")" & vbCrLf
            End If

            If (AddSR.Pedidos(i).FolioPedido = "") Then
                msgError &= "Indique el Folio del Pedido. (Pedido:" & i & ")" & vbCrLf
            ElseIf Not (IsNumeric(AddSR.Pedidos(i).FolioPedido)) Then
                msgError &= "El Folio del Pedido debe ser numérico. (Pedido:" & i & ")" & vbCrLf
            End If

            If (AddSR.Pedidos(i).TiendaPedido = "") Then
                msgError &= "Indique la Tienda del Pedido. (Pedido:" & i & ")" & vbCrLf
            ElseIf Not (IsNumeric(AddSR.Pedidos(i).TiendaPedido)) Then
                msgError &= "La Tienda del Pedido debe ser numérico. (Pedido:" & i & ")" & vbCrLf
            End If

            If (AddSR.Pedidos(i).CantidadArticulos = "") Then
                msgError &= "Indique la Cantidad de Articulos del Pedido. (Pedido:" & i & ")" & vbCrLf
            ElseIf Not (IsNumeric(AddSR.Pedidos(i).CantidadArticulos)) Then
                msgError &= "La Cantidad de Articulos del Pedido debe ser numérico. (Pedido:" & i & ")" & vbCrLf
            End If

            If (msgError = "") Then
                isValid_Pedidos = True
            Else
                isValid_Pedidos = False
                ValidaCFDi.AgregaRespuesta("08", 0, msgError, Resp)
            End If
        Catch ex As Exception
            isValid_Pedidos = False
            ValidaCFDi.AgregaRespuesta("08", 0, ex.Message, Resp)
        End Try
    End Function

    Public Function isValid_Articulos(ByRef Resp As List(Of RespuestaPremium), _
                                      ByVal AddSR As SR.AddSorianaReverse.DocumentoFacturaSorianaReverse, _
                                      ByVal i As Integer) As Boolean
        Dim msgError As String = ""
        Try
            'PEDIDOS
            If (AddSR.Articulos(i).IdArticulo = "") Then
                msgError &= "Indique el Id. (Articulo:" & i & ")" & vbCrLf
            End If

            If (AddSR.Articulos(i).RowOrderArticulo = "") Then
                msgError &= "Indique el RowOrder. (Articulo:" & i & ")" & vbCrLf
            End If

            If (AddSR.Articulos(i).FolioPedidoArticulo = "") Then
                msgError &= "Indique el Folio del Pedido. (Articulo:" & i & ")" & vbCrLf
            ElseIf Not (IsNumeric(AddSR.Articulos(i).FolioPedidoArticulo)) Then
                msgError &= "El Folio del Pedido debe ser numérico. (Articulo:" & i & ")" & vbCrLf
            End If

            If (AddSR.Articulos(i).TiendaArticulo = "") Then
                msgError &= "Indique la Tienda del Articulo. (Articulo:" & i & ")" & vbCrLf
            ElseIf Not (IsNumeric(AddSR.Articulos(i).TiendaArticulo)) Then
                msgError &= "La Tienda del Pedido debe ser numérico. (Articulo:" & i & ")" & vbCrLf
            End If

            If (AddSR.Articulos(i).Codigo = "") Then
                msgError &= "Indique el Codigo del Articulo. (Articulo:" & i & ")" & vbCrLf
            ElseIf Not (IsNumeric(AddSR.Articulos(i).Codigo)) Then
                msgError &= "El Codigo del Articulo debe ser numérico. (Articulo:" & i & ")" & vbCrLf
            End If

            If (AddSR.Articulos(i).CantidadUnidadCompra = "") Then
                msgError &= "Indique la Cantidad del Articulo. (Articulo:" & i & ")" & vbCrLf
            ElseIf Not (IsNumeric(AddSR.Articulos(i).CantidadUnidadCompra)) Then
                msgError &= "La Cantidad del Articulo debe ser numérica. (Articulo:" & i & ")" & vbCrLf
            End If

            If (AddSR.Articulos(i).CostoNetoUnidadCompra = "") Then
                msgError &= "Indique el Costo del Articulo. (Articulo:" & i & ")" & vbCrLf
            ElseIf Not (IsNumeric(AddSR.Articulos(i).CostoNetoUnidadCompra)) Then
                msgError &= "El Costo del Articulo debe ser numérico. (Articulo:" & i & ")" & vbCrLf
            End If

            If (AddSR.Articulos(i).PorcentajeIEPS = "") Then
                msgError &= "Indique el Porcentaje de IEPS del Articulo. (Articulo:" & i & ")" & vbCrLf
            ElseIf Not (IsNumeric(AddSR.Articulos(i).PorcentajeIEPS)) Then
                msgError &= "El Porcentaje de IEPS del Articulo debe ser numérico. (Articulo:" & i & ")" & vbCrLf
            End If

            If (AddSR.Articulos(i).PorcentajeIVA = "") Then
                msgError &= "Indique el Porcentaje de IVA del Articulo. (Articulo:" & i & ")" & vbCrLf
            ElseIf Not (IsNumeric(AddSR.Articulos(i).PorcentajeIVA)) Then
                msgError &= "El Porcentaje de IVA del Articulo debe ser numérico. (Articulo:" & i & ")" & vbCrLf
            End If

            If (msgError = "") Then
                isValid_Articulos = True
            Else
                isValid_Articulos = False
                ValidaCFDi.AgregaRespuesta("08", 0, msgError, Resp)
            End If
        Catch ex As Exception
            isValid_Articulos = False
            ValidaCFDi.AgregaRespuesta("08", 0, ex.Message, Resp)
        End Try
    End Function
#End Region

    Public Function creaXML(ByRef Resp As List(Of RespuestaPremium), ByVal AddSR As SR.AddSorianaReverse.DocumentoFacturaSorianaReverse) As String
        Try
            Dim xmlAddenda As XmlDocument = New XmlDocument()
            Dim xmlAtt As XmlAttribute
            Dim Valor As XmlText
            'Addenda
            Dim DS As XmlNode = xmlAddenda.CreateElement("DSCargaRemisionProv")
            xmlAddenda.AppendChild(DS)

            'REMISION
            Dim Remision As XmlNode = xmlAddenda.CreateElement("Remision")
            xmlAtt = xmlAddenda.CreateAttribute("Id")
            xmlAtt.Value = AddSR.Id
            Remision.Attributes.Append(xmlAtt)
            xmlAtt = xmlAddenda.CreateAttribute("RowOrder")
            xmlAtt.Value = AddSR.RowOrder
            Remision.Attributes.Append(xmlAtt)

            Dim Proveedor As XmlNode = xmlAddenda.CreateElement("Proveedor")
            Valor = xmlAddenda.CreateTextNode(AddSR.Proveedor)
            Proveedor.AppendChild(Valor)
            Remision.AppendChild(Proveedor)

            Dim RemisionRem As XmlNode = xmlAddenda.CreateElement("Remision")
            Valor = xmlAddenda.CreateTextNode(AddSR.Remision)
            RemisionRem.AppendChild(Valor)
            Remision.AppendChild(RemisionRem)

            Dim Consecutivo As XmlNode = xmlAddenda.CreateElement("Consecutivo")
            Valor = xmlAddenda.CreateTextNode(AddSR.Consecutivo)
            Consecutivo.AppendChild(Valor)
            Remision.AppendChild(Consecutivo)

            Dim FechaRemision As XmlNode = xmlAddenda.CreateElement("FechaRemision")
            Valor = xmlAddenda.CreateTextNode(Format(Convert.ToDateTime(AddSR.FechaRemision), "yyyy-MM-dd"))
            FechaRemision.AppendChild(Valor)
            Remision.AppendChild(FechaRemision)

            Dim Tienda As XmlNode = xmlAddenda.CreateElement("Tienda")
            Valor = xmlAddenda.CreateTextNode(AddSR.Tienda)
            Tienda.AppendChild(Valor)
            Remision.AppendChild(Tienda)

            Dim TipoMoneda As XmlNode = xmlAddenda.CreateElement("TipoMoneda")
            Valor = xmlAddenda.CreateTextNode(AddSR.TipoMoneda)
            TipoMoneda.AppendChild(Valor)
            Remision.AppendChild(TipoMoneda)

            Dim TipoBulto As XmlNode = xmlAddenda.CreateElement("TipoBulto")
            Valor = xmlAddenda.CreateTextNode(AddSR.TipoBulto)
            TipoBulto.AppendChild(Valor)
            Remision.AppendChild(TipoBulto)

            Dim EntregaMercancia As XmlNode = xmlAddenda.CreateElement("EntregaMercancia")
            Valor = xmlAddenda.CreateTextNode(AddSR.EntregaMercancia)
            EntregaMercancia.AppendChild(Valor)
            Remision.AppendChild(EntregaMercancia)

            Dim CumpleReqFiscales As XmlNode = xmlAddenda.CreateElement("CumpleReqFiscales")
            Valor = xmlAddenda.CreateTextNode(AddSR.CumpleReqFiscales)
            CumpleReqFiscales.AppendChild(Valor)
            Remision.AppendChild(CumpleReqFiscales)

            Dim CantidadBultos As XmlNode = xmlAddenda.CreateElement("CantidadBultos")
            Valor = xmlAddenda.CreateTextNode(AddSR.CantidadBultos)
            CantidadBultos.AppendChild(Valor)
            Remision.AppendChild(CantidadBultos)

            Dim Subtotal As XmlNode = xmlAddenda.CreateElement("Subtotal")
            Valor = xmlAddenda.CreateTextNode(AddSR.Subtotal)
            Subtotal.AppendChild(Valor)
            Remision.AppendChild(Subtotal)

            Dim Descuentos As XmlNode = xmlAddenda.CreateElement("Descuentos")
            Valor = xmlAddenda.CreateTextNode(AddSR.Descuentos)
            Descuentos.AppendChild(Valor)
            Remision.AppendChild(Descuentos)

            Dim IEPS As XmlNode = xmlAddenda.CreateElement("IEPS")
            Valor = xmlAddenda.CreateTextNode(AddSR.IEPS)
            IEPS.AppendChild(Valor)
            Remision.AppendChild(IEPS)

            Dim IVA As XmlNode = xmlAddenda.CreateElement("IVA")
            Valor = xmlAddenda.CreateTextNode(AddSR.IVA)
            IVA.AppendChild(Valor)
            Remision.AppendChild(IVA)

            Dim OtrosImpuestos = xmlAddenda.CreateElement("OtrosImpuestos")
            Valor = xmlAddenda.CreateTextNode(AddSR.OtrosImpuestos)
            OtrosImpuestos.AppendChild(Valor)
            Remision.AppendChild(OtrosImpuestos)

            Dim Total As XmlNode = xmlAddenda.CreateElement("Total")
            Valor = xmlAddenda.CreateTextNode(AddSR.Total)
            Total.AppendChild(Valor)
            Remision.AppendChild(Total)

            Dim CantidadPedidos As XmlNode = xmlAddenda.CreateElement("CantidadPedidos")
            Valor = xmlAddenda.CreateTextNode(AddSR.CantidadPedidos)
            CantidadPedidos.AppendChild(Valor)
            Remision.AppendChild(CantidadPedidos)

            Dim FechaEntregaMercancia As XmlNode = xmlAddenda.CreateElement("FechaEntregaMercancia")
            Valor = xmlAddenda.CreateTextNode(Format(Convert.ToDateTime(AddSR.FechaEntregaMercancia), "yyyy-MM-dd"))
            FechaEntregaMercancia.AppendChild(Valor)
            Remision.AppendChild(FechaEntregaMercancia)

            If (AddSR.Cita <> "") Then
                Dim Cita As XmlNode = xmlAddenda.CreateElement("Cita")
                Valor = xmlAddenda.CreateTextNode(AddSR.Cita)
                Cita.AppendChild(Valor)
                Remision.AppendChild(Cita)
                Cita = Nothing
            End If

            If (AddSR.FolioNotaEntrada <> "") Then
                Dim FolioNota As XmlNode = xmlAddenda.CreateElement("FolioNotaEntrada")
                Valor = xmlAddenda.CreateTextNode(AddSR.FolioNotaEntrada)
                FolioNota.AppendChild(Valor)
                Remision.AppendChild(FolioNota)
                FolioNota = Nothing
            End If

            DS.AppendChild(Remision)



            'PEDIMENTO
            If Not (AddSR.IdPedimento Is Nothing) Then
                Dim Pedimento As XmlNode = xmlAddenda.CreateElement("Pedimento")
                xmlAtt = xmlAddenda.CreateAttribute("Id")
                xmlAtt.Value = AddSR.IdPedimento
                Pedimento.Attributes.Append(xmlAtt)
                xmlAtt = xmlAddenda.CreateAttribute("RowOrder")
                xmlAtt.Value = AddSR.RowOrderPedimento
                Pedimento.Attributes.Append(xmlAtt)



                Dim ProveedorPedimento As XmlNode = xmlAddenda.CreateElement("Proveedor")
                Valor = xmlAddenda.CreateTextNode(AddSR.Proveedor)
                ProveedorPedimento.AppendChild(Valor)
                Pedimento.AppendChild(ProveedorPedimento)


                Dim RemisionPedimento As XmlNode = xmlAddenda.CreateElement("Remision")
                Valor = xmlAddenda.CreateTextNode(AddSR.Remision)
                RemisionPedimento.AppendChild(Valor)
                Pedimento.AppendChild(RemisionPedimento)


                Dim PedimentoPed As XmlNode = xmlAddenda.CreateElement("Pedimento")
                Valor = xmlAddenda.CreateTextNode(AddSR.Pedimento)
                PedimentoPed.AppendChild(Valor)
                Pedimento.AppendChild(PedimentoPed)


                Dim Aduana As XmlNode = xmlAddenda.CreateElement("Aduana")
                Valor = xmlAddenda.CreateTextNode(AddSR.Aduana)
                Aduana.AppendChild(Valor)
                Pedimento.AppendChild(Aduana)


                Dim AgenteAduanal As XmlNode = xmlAddenda.CreateElement("AgenteAduanal")
                Valor = xmlAddenda.CreateTextNode(AddSR.AgenteAduanal)
                AgenteAduanal.AppendChild(Valor)
                Pedimento.AppendChild(AgenteAduanal)


                Dim TipoPedimento As XmlNode = xmlAddenda.CreateElement("TipoPedimento")
                Valor = xmlAddenda.CreateTextNode(AddSR.TipoPedimento)
                TipoPedimento.AppendChild(Valor)
                Pedimento.AppendChild(TipoPedimento)


                Dim FechaPedimento As XmlNode = xmlAddenda.CreateElement("FechaPedimento")
                Valor = xmlAddenda.CreateTextNode(Format(Convert.ToDateTime(AddSR.FechaPedimento), "yyyy-MM-ddThh:mm:ss"))
                FechaPedimento.AppendChild(Valor)
                Pedimento.AppendChild(FechaPedimento)


                Dim FechaReciboLaredo As XmlNode = xmlAddenda.CreateElement("FechaReciboLaredo")
                Valor = xmlAddenda.CreateTextNode(Format(Convert.ToDateTime(AddSR.FechaReciboLaredo), "yyyy-MM-ddThh:mm:ss"))
                FechaReciboLaredo.AppendChild(Valor)
                Pedimento.AppendChild(FechaReciboLaredo)


                Dim FechaBillOfLading As XmlNode = xmlAddenda.CreateElement("FechaBillOfLading")
                Valor = xmlAddenda.CreateTextNode(Format(Convert.ToDateTime(AddSR.FechaBillOfLading), "yyyy-MM-ddThh:mm:ss"))
                FechaBillOfLading.AppendChild(Valor)
                Pedimento.AppendChild(FechaBillOfLading)

                DS.AppendChild(Pedimento)

                Pedimento = Nothing
                ProveedorPedimento = Nothing
                RemisionPedimento = Nothing
                Aduana = Nothing
                AgenteAduanal = Nothing
                TipoPedimento = Nothing
                FechaPedimento = Nothing
                FechaReciboLaredo = Nothing
                FechaBillOfLading = Nothing
            End If

            'PEDIDOS
            If (AddSR.Pedidos.Count > 0) Then
                For Each dr As SR.AddSorianaReverse.Pedidos In AddSR.Pedidos

                    Dim Pedidos As XmlNode = xmlAddenda.CreateElement("Pedidos")
                    xmlAtt = xmlAddenda.CreateAttribute("Id")
                    xmlAtt.Value = dr.IdPedido
                    Pedidos.Attributes.Append(xmlAtt)
                    xmlAtt = xmlAddenda.CreateAttribute("RowOrder")
                    xmlAtt.Value = dr.RowOrderPedido
                    Pedidos.Attributes.Append(xmlAtt)


                    Dim ProveedorPedido As XmlNode = xmlAddenda.CreateElement("Proveedor")
                    Valor = xmlAddenda.CreateTextNode(AddSR.Proveedor)
                    ProveedorPedido.AppendChild(Valor)
                    Pedidos.AppendChild(ProveedorPedido)


                    Dim RemisionPedido As XmlNode = xmlAddenda.CreateElement("Remision")
                    Valor = xmlAddenda.CreateTextNode(AddSR.Remision)
                    RemisionPedido.AppendChild(Valor)
                    Pedidos.AppendChild(RemisionPedido)


                    Dim FolioPedido As XmlNode = xmlAddenda.CreateElement("FolioPedido")
                    Valor = xmlAddenda.CreateTextNode(dr.FolioPedido)
                    FolioPedido.AppendChild(Valor)
                    Pedidos.AppendChild(FolioPedido)


                    Dim TiendaPedido As XmlNode = xmlAddenda.CreateElement("Tienda")
                    Valor = xmlAddenda.CreateTextNode(dr.TiendaPedido)
                    TiendaPedido.AppendChild(Valor)
                    Pedidos.AppendChild(TiendaPedido)


                    Dim CantidadArticulos As XmlNode = xmlAddenda.CreateElement("CantidadArticulos")
                    Valor = xmlAddenda.CreateTextNode(dr.CantidadArticulos)
                    CantidadArticulos.AppendChild(Valor)
                    Pedidos.AppendChild(CantidadArticulos)

                    If (AddSR.FolioNotaEntrada <> "") Then
                        Dim PedidoEmitidoProveedor As XmlNode = xmlAddenda.CreateElement("PedidoEmitidoProveedor")
                        Valor = xmlAddenda.CreateTextNode(dr.PedidoEmitidoProveedor)
                        PedidoEmitidoProveedor.AppendChild(Valor)
                        Pedidos.AppendChild(PedidoEmitidoProveedor)
                    End If

                    DS.AppendChild(Pedidos)

                Next
            End If

            'ARTICULOS
            For Each dr As SR.AddSorianaReverse.Articulos In AddSR.Articulos

                Dim Articulos As XmlNode = xmlAddenda.CreateElement("Articulos")
                xmlAtt = xmlAddenda.CreateAttribute("Id")
                xmlAtt.Value = dr.IdArticulo
                Articulos.Attributes.Append(xmlAtt)


                xmlAtt = xmlAddenda.CreateAttribute("RowOrder")
                xmlAtt.Value = dr.RowOrderArticulo
                Articulos.Attributes.Append(xmlAtt)


                Dim ProveedorArticulo As XmlNode = xmlAddenda.CreateElement("Proveedor")
                Valor = xmlAddenda.CreateTextNode(AddSR.Proveedor)
                ProveedorArticulo.AppendChild(Valor)
                Articulos.AppendChild(ProveedorArticulo)


                Dim RemisionArticulo As XmlNode = xmlAddenda.CreateElement("Remision")
                Valor = xmlAddenda.CreateTextNode(AddSR.Remision)
                RemisionArticulo.AppendChild(Valor)
                Articulos.AppendChild(RemisionArticulo)


                Dim FolioPedidoArticulo As XmlNode = xmlAddenda.CreateElement("FolioPedido")
                Valor = xmlAddenda.CreateTextNode(dr.FolioPedidoArticulo)
                FolioPedidoArticulo.AppendChild(Valor)
                Articulos.AppendChild(FolioPedidoArticulo)


                Dim TiendaArticulo As XmlNode = xmlAddenda.CreateElement("Tienda")
                Valor = xmlAddenda.CreateTextNode(dr.TiendaArticulo)
                TiendaArticulo.AppendChild(Valor)
                Articulos.AppendChild(TiendaArticulo)


                Dim CodigoArticulo As XmlNode = xmlAddenda.CreateElement("Codigo")
                Valor = xmlAddenda.CreateTextNode(dr.Codigo)
                CodigoArticulo.AppendChild(Valor)
                Articulos.AppendChild(CodigoArticulo)


                Dim CantidadUnidadDeCompra As XmlNode = xmlAddenda.CreateElement("CantidadUnidadCompra")
                Valor = xmlAddenda.CreateTextNode(dr.CantidadUnidadCompra)
                CantidadUnidadDeCompra.AppendChild(Valor)
                Articulos.AppendChild(CantidadUnidadDeCompra)


                Dim CostoNetoUnidadCompra As XmlNode = xmlAddenda.CreateElement("CostoNetoUnidadCompra")
                Valor = xmlAddenda.CreateTextNode(dr.CostoNetoUnidadCompra)
                CostoNetoUnidadCompra.AppendChild(Valor)
                Articulos.AppendChild(CostoNetoUnidadCompra)


                Dim PorcentajeIEPS As XmlNode = xmlAddenda.CreateElement("PorcentajeIEPS")
                Valor = xmlAddenda.CreateTextNode(dr.PorcentajeIEPS)
                PorcentajeIEPS.AppendChild(Valor)
                Articulos.AppendChild(PorcentajeIEPS)


                Dim PorcentajeIVA As XmlNode = xmlAddenda.CreateElement("PorcentajeIVA")
                Valor = xmlAddenda.CreateTextNode(dr.PorcentajeIVA)
                PorcentajeIVA.AppendChild(Valor)
                Articulos.AppendChild(PorcentajeIVA)


                DS.AppendChild(Articulos)

            Next

            Return xmlAddenda.InnerXml

        Catch ex As Exception
            ValidaCFDi.AgregaRespuesta("08", 0, "Ocurrió un error al generar la Addenda: " & ex.Message, Resp)
            Return Nothing
        End Try
    End Function

    Public Sub creaTXT(ByVal AddMasFactura As MasFactur.AddMasFactura.DocumentoFacturaMasFactura, _
                            ByRef txt As String, ByRef Resp As List(Of RespuestaPremium))
        Try
            Dim sw As New System.IO.StreamWriter(txt, True, System.Text.Encoding.UTF8)
            sw.WriteLine("ENCAB")
            If (AddMasFactura.Versio <> "") Then
                sw.WriteLine("VERSIO" & Chr(9) & AddMasFactura.Versio)
            End If
            If (AddMasFactura.Tradpp <> "") Then
                sw.WriteLine("TRADPP" & Chr(9) & AddMasFactura.Tradpp)
            End If
            If (AddMasFactura.Ctppro <> "") Then
                sw.WriteLine("CTPPRO" & Chr(9) & AddMasFactura.Ctppro)
            End If
            If (AddMasFactura.Numfol <> "") Then
                sw.WriteLine("NUMFOL" & Chr(9) & AddMasFactura.Numfol)
            End If
            If (AddMasFactura.Serfol <> "") Then
                sw.WriteLine("SERFOL" & Chr(9) & AddMasFactura.Serfol)
            End If
            If (AddMasFactura.Fecexp <> "") Then
                sw.WriteLine("FECEXP" & Chr(9) & Convert.ToDateTime(AddMasFactura.Fecexp).ToString("yyyy-MM-ddTHH:mm:ss"))
            End If
            If (AddMasFactura.Noapro <> "") Then
                sw.WriteLine("NOAPRO" & Chr(9) & AddMasFactura.Noapro)
            End If
            If (AddMasFactura.Forpag <> "") Then
                sw.WriteLine("FORPAG" & Chr(9) & AddMasFactura.Forpag)
            End If
            If (AddMasFactura.Metpag <> "") Then
                sw.WriteLine("METPAG" & Chr(9) & AddMasFactura.Metpag)
            End If
            If (AddMasFactura.Numche <> "") Then
                sw.WriteLine("NUMCHE" & Chr(9) & AddMasFactura.Numche)
            End If
            If (AddMasFactura.Tipdoc <> "") Then
                sw.WriteLine("TIPDOC" & Chr(9) & AddMasFactura.Tipdoc)
            End If
            If (AddMasFactura.Nomdoc <> "") Then
                sw.WriteLine("NOMDOC" & Chr(9) & AddMasFactura.Nomdoc)
            End If
            If (AddMasFactura.Fundoc <> "") Then
                sw.WriteLine("FUNDOC" & Chr(9) & AddMasFactura.Fundoc)
            End If
            If (AddMasFactura.Tipmon <> "") Then
                sw.WriteLine("TIPMON" & Chr(9) & AddMasFactura.Tipmon)
            End If
            If (AddMasFactura.Tipcam.ToString() <> "" And AddMasFactura.Tipmon.ToString() <> "MXN") Then
                sw.WriteLine("TIPCAM" & Chr(9) & AddMasFactura.Tipcam)
            End If
            If (AddMasFactura.Diapag <> "") Then
                sw.WriteLine("DIAPAG" & Chr(9) & AddMasFactura.Diapag)
            End If
            If (AddMasFactura.Pdppag <> "") Then
                sw.WriteLine("PDPPAG" & Chr(9) & AddMasFactura.Pdppag)
            End If
            If (AddMasFactura.Mdppag <> "") Then
                sw.WriteLine("MDPPAG" & Chr(9) & AddMasFactura.Mdppag)
            End If
            If (AddMasFactura.Numeoc <> "") Then
                sw.WriteLine("NUMEOC" & Chr(9) & AddMasFactura.Numeoc)
            End If
            If (AddMasFactura.Fechoc <> "") Then
                sw.WriteLine("FECHOC" & Chr(9) & AddMasFactura.Fechoc)
            End If
            If (AddMasFactura.Notas1 <> "") Then
                sw.WriteLine("NOTAS1" & Chr(9) & AddMasFactura.Notas1)
            End If
            If (AddMasFactura.Notas2 <> "") Then
                sw.WriteLine("NOTAS2" & Chr(9) & AddMasFactura.Notas2)
            End If
            If (AddMasFactura.Notas3 <> "") Then
                sw.WriteLine("NOTAS3" & Chr(9) & AddMasFactura.Notas3)
            End If
            If (AddMasFactura.Numdpt.ToString() <> "") Then
                sw.WriteLine("NUMDPT" & Chr(9) & AddMasFactura.Numdpt)
            End If
            If (AddMasFactura.Nomdpt.ToString() <> "") Then
                sw.WriteLine("NOMDPT" & Chr(9) & AddMasFactura.Nomdpt)
            End If
            If (AddMasFactura.Feccon.ToString() <> "") Then
                sw.WriteLine("FECCON" & Chr(9) & AddMasFactura.Feccon)
            End If
            If (AddMasFactura.Contra.ToString() <> "") Then
                sw.WriteLine("CONTRA" & Chr(9) & AddMasFactura.Contra)
            End If
            If (AddMasFactura.Tda_contra.ToString() <> "") Then
                sw.WriteLine("TDA_CONTRA" & Chr(9) & AddMasFactura.Tda_contra)
            End If
            If (AddMasFactura.Po_numeoc.ToString() <> "") Then
                sw.WriteLine("PO_NUMEOC" & Chr(9) & AddMasFactura.Po_numeoc)
            End If
            If (AddMasFactura.Ieps_id.ToString() <> "") Then
                sw.WriteLine("IEPS_ID" & Chr(9) & AddMasFactura.Ieps_id)
            End If
            If (AddMasFactura.Reffac.ToString() <> "") Then
                sw.WriteLine("REFFAC" & Chr(9) & AddMasFactura.Reffac)
            End If
            If (AddMasFactura.Hojneg.ToString() <> "") Then
                sw.WriteLine("HOJNEG" & Chr(9) & AddMasFactura.Hojneg)
            End If
            If (AddMasFactura.Numcli.ToString() <> "") Then
                sw.WriteLine("NUMCLI" & Chr(9) & AddMasFactura.Numcli)
            End If
            If (AddMasFactura.Flete.ToString() <> "") Then
                sw.WriteLine("FLETE" & Chr(9) & AddMasFactura.Flete)
            End If
            ''EMISOR
            If (AddMasFactura.Rfcemi <> "") Then
                sw.WriteLine("RFCEMI" & Chr(9) & AddMasFactura.Rfcemi)
            End If
            If (AddMasFactura.Nomemi <> "") Then
                sw.WriteLine("NOMEMI" & Chr(9) & AddMasFactura.Nomemi)
            End If
            If (AddMasFactura.Eanemi <> "") Then
                sw.WriteLine("EANEMI" & Chr(9) & AddMasFactura.Eanemi)
            End If
            If (AddMasFactura.Numemi <> "") Then
                sw.WriteLine("NUMEMI" & Chr(9) & AddMasFactura.Numemi)
            End If
            If (AddMasFactura.Calemi <> "") Then
                sw.WriteLine("CALEMI" & Chr(9) & AddMasFactura.Calemi)
            End If
            If (AddMasFactura.Nexemi <> "") Then
                sw.WriteLine("NEXEMI" & Chr(9) & AddMasFactura.Nexemi)
            End If
            If (AddMasFactura.Ninemi <> "") Then
                sw.WriteLine("NINEMI" & Chr(9) & AddMasFactura.Ninemi)
            End If
            If (AddMasFactura.Colemi <> "") Then
                sw.WriteLine("COLEMI" & Chr(9) & AddMasFactura.Colemi)
            End If
            If (AddMasFactura.Locemi <> "") Then
                sw.WriteLine("LOCEMI" & Chr(9) & AddMasFactura.Locemi)
            End If
            If (AddMasFactura.Refemi <> "") Then
                sw.WriteLine("REFEMI" & Chr(9) & AddMasFactura.Refemi)
            End If
            If (AddMasFactura.Munemi <> "") Then
                sw.WriteLine("MUNEMI" & Chr(9) & AddMasFactura.Munemi)
            End If
            If (AddMasFactura.Estemi <> "") Then
                sw.WriteLine("ESTEMI" & Chr(9) & AddMasFactura.Estemi)
            End If
            If (AddMasFactura.Paiemi <> "") Then
                sw.WriteLine("PAIEMI" & Chr(9) & AddMasFactura.Paiemi)
            End If
            If (AddMasFactura.Codemi <> "") Then
                sw.WriteLine("CODEMI" & Chr(9) & AddMasFactura.Codemi)
            End If
            If (AddMasFactura.Mailemi <> "") Then
                sw.WriteLine("MAILEMI" & Chr(9) & AddMasFactura.Mailemi)
            End If
            If (AddMasFactura.Ri_emi <> "") Then
                sw.WriteLine("RI_EMI" & Chr(9) & AddMasFactura.Ri_emi)
            End If

            ''LUGAR DE EXPEDICION
            If (AddMasFactura.Calexp <> "" Or AddMasFactura.Ninexp <> "" Or AddMasFactura.Colexp <> "" Or _
                AddMasFactura.Locexp <> "" Or AddMasFactura.Refexp <> "" Or AddMasFactura.Munexp <> "" Or _
                AddMasFactura.Estexp <> "" Or AddMasFactura.Paiexp <> "" Or AddMasFactura.Codexp <> "" Or _
                AddMasFactura.Eanexp <> "") Then
                If (AddMasFactura.Calexp <> "") Then
                    sw.WriteLine("CALEXP" & Chr(9) & AddMasFactura.Calexp)
                End If
                If (AddMasFactura.Nexexp <> "") Then
                    sw.WriteLine("NEXEXP" & Chr(9) & AddMasFactura.Nexexp)
                End If
                If (AddMasFactura.Ninexp <> "") Then
                    sw.WriteLine("NINEXP" & Chr(9) & AddMasFactura.Ninexp)
                End If
                If (AddMasFactura.Colexp <> "") Then
                    sw.WriteLine("COLEXP" & Chr(9) & AddMasFactura.Colexp)
                End If
                If (AddMasFactura.Locexp <> "") Then
                    sw.WriteLine("LOCEXP" & Chr(9) & AddMasFactura.Locexp)
                End If
                If (AddMasFactura.Refexp <> "") Then
                    sw.WriteLine("REFEXP" & Chr(9) & AddMasFactura.Refexp)
                End If
                If (AddMasFactura.Munexp <> "") Then
                    sw.WriteLine("MUNEXP" & Chr(9) & AddMasFactura.Munexp)
                End If
                If (AddMasFactura.Estexp <> "") Then
                    sw.WriteLine("ESTEXP" & Chr(9) & AddMasFactura.Estexp)
                End If
                If (AddMasFactura.Paiexp <> "") Then
                    sw.WriteLine("PAIEXP" & Chr(9) & AddMasFactura.Paiexp)
                End If
                If (AddMasFactura.Codexp <> "") Then
                    sw.WriteLine("CODEXP" & Chr(9) & AddMasFactura.Codexp)
                End If
                If (AddMasFactura.Eanexp <> "") Then
                    sw.WriteLine("EANEXP" & Chr(9) & AddMasFactura.Eanexp)
                End If
            End If

            ''RECEPTOR
            If (AddMasFactura.Rfcrec <> "") Then
                sw.WriteLine("RFCREC" & Chr(9) & AddMasFactura.Rfcrec)
            End If
            If (AddMasFactura.Nomrec <> "") Then
                sw.WriteLine("NOMREC" & Chr(9) & AddMasFactura.Nomrec)
            End If
            If (AddMasFactura.Calrec <> "") Then
                sw.WriteLine("CALREC" & Chr(9) & AddMasFactura.Calrec)
            End If
            If (AddMasFactura.Nexrec <> "") Then
                sw.WriteLine("NEXREC" & Chr(9) & AddMasFactura.Nexrec)
            End If
            If (AddMasFactura.Ninrec <> "") Then
                sw.WriteLine("NINREC" & Chr(9) & AddMasFactura.Ninrec)
            End If
            If (AddMasFactura.Colrec <> "") Then
                sw.WriteLine("COLREC" & Chr(9) & AddMasFactura.Colrec)
            End If
            If (AddMasFactura.Locrec <> "") Then
                sw.WriteLine("LOCREC" & Chr(9) & AddMasFactura.Locrec)
            End If
            If (AddMasFactura.Refrec <> "") Then
                sw.WriteLine("REFREC" & Chr(9) & AddMasFactura.Refrec)
            End If
            If (AddMasFactura.Munrec <> "") Then
                sw.WriteLine("MUNREC" & Chr(9) & AddMasFactura.Munrec)
            End If
            If (AddMasFactura.Estrec <> "") Then
                sw.WriteLine("ESTREC" & Chr(9) & AddMasFactura.Estrec)
            End If
            If (AddMasFactura.Pairec <> "") Then
                sw.WriteLine("PAIREC" & Chr(9) & AddMasFactura.Pairec)
            End If
            If (AddMasFactura.Codrec <> "") Then
                sw.WriteLine("CODREC" & Chr(9) & AddMasFactura.Codrec)
            End If
            If (AddMasFactura.Eanrec <> "") Then
                sw.WriteLine("EANREC" & Chr(9) & AddMasFactura.Eanrec)
            End If
            If (AddMasFactura.Bodrec <> "") Then
                sw.WriteLine("BODREC" & Chr(9) & AddMasFactura.Bodrec)
            End If
            If (AddMasFactura.Ri_rec <> "") Then
                sw.WriteLine("RI_REC" & Chr(9) & AddMasFactura.Ri_rec)
            End If

            'LUGAR DE RECEPCION
            If (AddMasFactura.Rfcent <> "") Then
                sw.WriteLine("RFCENT" & Chr(9) & AddMasFactura.Rfcent)
            End If
            If (AddMasFactura.Noment <> "") Then
                sw.WriteLine("NOMENT" & Chr(9) & AddMasFactura.Noment)
            End If
            If (AddMasFactura.Calent <> "") Then
                sw.WriteLine("CALENT" & Chr(9) & AddMasFactura.Calent)
            End If
            If (AddMasFactura.Nexent <> "") Then
                sw.WriteLine("NEXENT" & Chr(9) & AddMasFactura.Nexent)
            End If
            If (AddMasFactura.Ninent <> "") Then
                sw.WriteLine("NINENT" & Chr(9) & AddMasFactura.Ninent)
            End If
            If (AddMasFactura.Colent <> "") Then
                sw.WriteLine("COLENT" & Chr(9) & AddMasFactura.Colent)
            End If
            If (AddMasFactura.Locent <> "") Then
                sw.WriteLine("LOCENT" & Chr(9) & AddMasFactura.Locent)
            End If
            If (AddMasFactura.Refent <> "") Then
                sw.WriteLine("REFENT" & Chr(9) & AddMasFactura.Refent)
            End If
            If (AddMasFactura.Munent <> "") Then
                sw.WriteLine("MUNENT" & Chr(9) & AddMasFactura.Munent)
            End If
            If (AddMasFactura.Estent <> "") Then
                sw.WriteLine("ESTENT" & Chr(9) & AddMasFactura.Estent)
            End If
            If (AddMasFactura.Paient <> "") Then
                sw.WriteLine("PAIENT" & Chr(9) & AddMasFactura.Paient)
            End If
            If (AddMasFactura.Codent <> "") Then
                sw.WriteLine("CODENT" & Chr(9) & AddMasFactura.Codent)
            End If
            If (AddMasFactura.Eanent <> "") Then
                sw.WriteLine("EANENT" & Chr(9) & AddMasFactura.Eanent)
            End If
            If (AddMasFactura.Numtie <> "") Then
                sw.WriteLine("NUMTIE" & Chr(9) & AddMasFactura.Numtie)
            End If
            If (AddMasFactura.Bodent <> "") Then
                sw.WriteLine("BODENT" & Chr(9) & AddMasFactura.Bodent)
            End If

            ''TOTALES
            If (AddMasFactura.Totlpf <> "") Then
                sw.WriteLine("TOTLPF" & Chr(9) & AddMasFactura.Totlpf)
            End If
            If (AddMasFactura.Subtbr <> "") Then
                sw.WriteLine("SUBTBR" & Chr(9) & AddMasFactura.Subtbr)
            End If
            If (AddMasFactura.Mondes <> "") Then
                sw.WriteLine("MONDES" & Chr(9) & AddMasFactura.Mondes)
            End If
            If (AddMasFactura.Subto2 <> "") Then
                sw.WriteLine("SUBTO2" & Chr(9) & AddMasFactura.Subto2)
            End If
            If (AddMasFactura.Coddes <> "") Then
                sw.WriteLine("CODDES" & Chr(9) & AddMasFactura.Coddes)
            End If
            If (AddMasFactura.Mondet <> "") Then
                sw.WriteLine("MONDET" & Chr(9) & AddMasFactura.Mondet)
            End If
            If (AddMasFactura.Prcdsg <> "") Then
                sw.WriteLine("PRCDSG" & Chr(9) & AddMasFactura.Prcdsg)
            End If
            If (AddMasFactura.Prcdsg_r <> "") Then
                sw.WriteLine("PRCDSG_R" & Chr(9) & AddMasFactura.Prcdsg_r)
            End If
            If (AddMasFactura.Subtsi <> "") Then
                sw.WriteLine("SUBTSI" & Chr(9) & AddMasFactura.Subtsi)
            End If
            If (AddMasFactura.Subtai <> "") Then
                sw.WriteLine("SUBTAI" & Chr(9) & AddMasFactura.Subtai)
            End If
            If (AddMasFactura.Subtot <> "") Then
                sw.WriteLine("SUBTOT" & Chr(9) & AddMasFactura.Subtot)
            End If
            If (AddMasFactura.Totiva <> "") Then
                sw.WriteLine("TOTIVA" & Chr(9) & AddMasFactura.Totiva)
            End If
            If (AddMasFactura.Ivatra <> "") Then
                sw.WriteLine("IVATRA" & Chr(9) & AddMasFactura.Ivatra)
            End If
            If (AddMasFactura.Tatiep <> "") Then
                sw.WriteLine("TATIEP" & Chr(9) & AddMasFactura.Tatiep)
            End If
            If (AddMasFactura.Ieptra <> "") Then
                sw.WriteLine("IEPTRA" & Chr(9) & AddMasFactura.Ieptra)
            End If
            If (AddMasFactura.Ivaret <> "") Then
                sw.WriteLine("IVARET" & Chr(9) & AddMasFactura.Ivaret)
            End If
            If (AddMasFactura.Prc_ivaret <> "") Then
                sw.WriteLine("PRC_IVARET" & Chr(9) & AddMasFactura.Prc_ivaret)
            End If
            If (AddMasFactura.Isrret <> "") Then
                sw.WriteLine("ISRRET" & Chr(9) & AddMasFactura.Isrret)
            End If
            If (AddMasFactura.Prc_isrret <> "") Then
                sw.WriteLine("PRC_ISRRET" & Chr(9) & AddMasFactura.Prc_isrret)
            End If
            If (AddMasFactura.Totpag <> "") Then
                sw.WriteLine("TOTPAG" & Chr(9) & AddMasFactura.Totpag)
            End If
            If (AddMasFactura.Prdesg_1 <> "") Then
                sw.WriteLine("PRDESG_1" & Chr(9) & AddMasFactura.Prdesg_1)
            End If
            If (AddMasFactura.Mondeg_1 <> "") Then
                sw.WriteLine("MONDEG_1" & Chr(9) & AddMasFactura.Mondeg_1)
            End If
            If (AddMasFactura.Subto3 <> "") Then
                sw.WriteLine("SUBTO3" & Chr(9) & AddMasFactura.Subto3)
            End If
            If (AddMasFactura.Prdesg_2 <> "") Then
                sw.WriteLine("PRDESG_2" & Chr(9) & AddMasFactura.Prdesg_2)
            End If
            If (AddMasFactura.Mondeg_2 <> "") Then
                sw.WriteLine("MONDEG_2" & Chr(9) & AddMasFactura.Mondeg_2)
            End If
            If (AddMasFactura.Subto4 <> "") Then
                sw.WriteLine("SUBTO4" & Chr(9) & AddMasFactura.Subto4)
            End If
            If (AddMasFactura.Prdesg_3 <> "") Then
                sw.WriteLine("PRDESG_3" & Chr(9) & AddMasFactura.Prdesg_3)
            End If
            If (AddMasFactura.Mondeg_3 <> "") Then
                sw.WriteLine("MONDEG_3" & Chr(9) & AddMasFactura.Mondeg_3)
            End If
            If (AddMasFactura.Subtot1 <> "") Then
                sw.WriteLine("SUBTOT" & Chr(9) & AddMasFactura.Subtot1)
            End If
            If (AddMasFactura.Prdesg <> "") Then
                sw.WriteLine("PRDESG" & Chr(9) & AddMasFactura.Prdesg)
            End If
            If (AddMasFactura.Mondeg <> "") Then
                sw.WriteLine("MONDEG" & Chr(9) & AddMasFactura.Mondeg)
            End If
            If (AddMasFactura.Totcan <> "") Then
                sw.WriteLine("TOTCAN" & Chr(9) & AddMasFactura.Totcan)
            End If

            ''CONCEPTOS
            For Each dr As MasFactur.AddMasFactura.Detalle In AddMasFactura.Conceptos
                If (dr.Cantid <> "") Then
                    sw.WriteLine("CANTID" & Chr(9) & dr.Cantid)
                End If
                If (dr.Cantip <> "") Then
                    sw.WriteLine("CANTIP" & Chr(9) & dr.Cantip)
                End If
                If (dr.Canpaq <> "") Then
                    sw.WriteLine("CANPAQ" & Chr(9) & dr.Canpaq)
                End If
                If (dr.Canemp <> "") Then
                    sw.WriteLine("CANEMP" & Chr(9) & dr.Canemp)
                End If
                If (dr.Unidad <> "") Then
                    sw.WriteLine("UNIDAD" & Chr(9) & dr.Unidad)
                End If
                If (dr.Cvesku <> "") Then
                    sw.WriteLine("CVESKU" & Chr(9) & dr.Cvesku)
                End If
                If (dr.Codupc <> "") Then
                    sw.WriteLine("CODUPC" & Chr(9) & dr.Codupc)
                End If
                If (dr.Piepem <> "") Then
                    sw.WriteLine("PIEPEM" & Chr(9) & dr.Piepem)
                End If
                If (dr.Coddun <> "") Then
                    sw.WriteLine("CODDUN" & Chr(9) & dr.Coddun)
                End If
                If (dr.Estilv <> "") Then
                    sw.WriteLine("ESTILV" & Chr(9) & dr.Estilv)
                End If
                If (dr.Colorv <> "") Then
                    sw.WriteLine("COLORV" & Chr(9) & dr.Colorv)
                End If
                If (dr.Tallav <> "") Then
                    sw.WriteLine("TALLAV" & Chr(9) & dr.Tallav)
                End If
                If (dr.Descri <> "") Then
                    sw.WriteLine("DESCRI" & Chr(9) & dr.Descri)
                End If
                If (dr.Pbrude <> "") Then
                    sw.WriteLine("PBRUDE" & Chr(9) & dr.Pbrude)
                End If
                If (dr.Impbru <> "") Then
                    sw.WriteLine("IMPBRU" & Chr(9) & dr.Impbru)
                End If
                If (dr.Tdecon <> "") Then
                    sw.WriteLine("TDECON" & Chr(9) & dr.Tdecon)
                End If
                If (dr.Mdecon <> "") Then
                    sw.WriteLine("MDECON" & Chr(9) & dr.Mdecon)
                End If
                If (dr.Cdecon <> "") Then
                    sw.WriteLine("CDECON" & Chr(9) & dr.Cdecon)
                End If
                If (dr.Valuni <> "") Then
                    sw.WriteLine("VALUNI" & Chr(9) & dr.Valuni)
                End If
                If (dr.Import <> "") Then
                    sw.WriteLine("IMPORT" & Chr(9) & dr.Import)
                End If
                If (dr.Tdecon0 <> "") Then
                    sw.WriteLine("TDECON0" & Chr(9) & dr.Tdecon0)
                End If
                If (dr.Mdecon0 <> "") Then
                    sw.WriteLine("MDECON0" & Chr(9) & dr.Mdecon0)
                End If
                If (dr.Tdecon1 <> "") Then
                    sw.WriteLine("TDECON1" & Chr(9) & dr.Tdecon1)
                End If
                If (dr.Mdecon1 <> "") Then
                    sw.WriteLine("MDECON1" & Chr(9) & dr.Mdecon1)
                End If
                If (dr.Tdecon2 <> "") Then
                    sw.WriteLine("TDECON2" & Chr(9) & dr.Tdecon2)
                End If
                If (dr.Mdecon2 <> "") Then
                    sw.WriteLine("MDECON2" & Chr(9) & dr.Mdecon2)
                End If
                If (dr.Tdecon3 <> "") Then
                    sw.WriteLine("TDECON3" & Chr(9) & dr.Tdecon3)
                End If
                If (dr.Mdecon3 <> "") Then
                    sw.WriteLine("MDECON3" & Chr(9) & dr.Mdecon3)
                End If
                If (dr.Tasipe <> "") Then
                    sw.WriteLine("TASIPE" & Chr(9) & dr.Tasipe)
                End If
                If (dr.Monipe <> "") Then
                    sw.WriteLine("MONIPE" & Chr(9) & dr.Monipe)
                End If
                If (dr.Tasipe <> "") Then
                    sw.WriteLine("TASIEP" & Chr(9) & dr.Tasiep)
                End If
                If (dr.Moniep <> "") Then
                    sw.WriteLine("MONIEP" & Chr(9) & dr.Moniep)
                End If
                If (dr.Ivaret_p <> "") Then
                    sw.WriteLine("IVARET_P" & Chr(9) & dr.Ivaret_p)
                End If
                If (dr.Ivaret_d <> "") Then
                    sw.WriteLine("IVARET_D" & Chr(9) & dr.Ivaret_d)
                End If
                If (dr.Isrret_p <> "") Then
                    sw.WriteLine("ISRRET_P" & Chr(9) & dr.Isrret_p)
                End If
                If (dr.Isrret_d <> "") Then
                    sw.WriteLine("ISRRET_D" & Chr(9) & dr.Isrret_d)
                End If
                If (dr.Numadu <> "") Then
                    sw.WriteLine("NUMADU" & Chr(9) & dr.Numadu)
                End If
                If (dr.Fecadu <> "" And _
                    dr.Numadu <> "") Then
                    sw.WriteLine("FECADU" & Chr(9) & Format(Convert.ToDateTime(dr.Fecadu), "yyyy-MM-dd"))
                End If
                If (dr.Aduana <> "") Then
                    sw.WriteLine("ADUANA" & Chr(9) & dr.Aduana)
                End If
                If (dr.Eanadu <> "") Then
                    sw.WriteLine("EANADU" & Chr(9) & dr.Eanadu)
                End If
                If (dr.Cuepre <> "") Then
                    sw.WriteLine("CUEPRE" & Chr(9) & dr.Cuepre)
                End If
                If (dr.Notasp1 <> "") Then
                    sw.WriteLine("NOTASP1" & Chr(9) & dr.Notasp1)
                End If
                If (dr.Notasp2 <> "") Then
                    sw.WriteLine("NOTASP2" & Chr(9) & dr.Notasp2)
                End If
                If (dr.Material <> "") Then
                    sw.WriteLine("MATERIAL" & Chr(9) & dr.Material)
                End If
                If (dr.Relleno <> "") Then
                    sw.WriteLine("RELLENO" & Chr(9) & dr.Relleno)
                End If
                If (dr.Kilataje <> "") Then
                    sw.WriteLine("KILATAJE" & Chr(9) & dr.Kilataje)
                End If
                If (dr.Peso <> "") Then
                    sw.WriteLine("PESO" & Chr(9) & dr.Peso)
                End If
                If (dr.Numlin <> "") Then
                    sw.WriteLine("NUMLIN" & Chr(9) & dr.Numlin)
                End If
            Next
            sw.Close()

        Catch ex As Exception
            ValidaCFDi.AgregaRespuesta("08", 0, "Ocurrió un error al generar la Addenda: " & ex.Message, Resp)
        End Try
    End Sub

#Region "Metodos_Auxiliares"
    Public Function valida_RFC(ByVal sRfc As String) As Boolean
        Dim re As Regex = New Regex( _
                            "^[a-zA-Z]{3,4}(\d{6})((\D|\d){3})?$", _
                            RegexOptions.IgnoreCase)
        Dim m As Match = re.Match(sRfc)
        If m.Captures.Count = 0 Then
            Return False
        Else
            Return True
        End If
    End Function
    Public Function valida_Correo(ByVal sCorreo As String) As Boolean
        Dim re As Regex = New Regex( _
                            "^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@" & _
                            "[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\." & _
                            "[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$", _
                            RegexOptions.IgnoreCase)
        Dim m As Match = re.Match(sCorreo)
        If m.Captures.Count = 0 Then
            Return False
        Else
            Return True
        End If
    End Function
    Private Sub IntegraNodo(ByRef Nodo As XmlNode, ByRef DocXml As XmlDocument, ByVal Val As String, _
                            ByVal At As String)
        Dim xmlAtt As XmlAttribute
        Dim Valor As XmlText
        Try
            Dim NodGenerico As XmlNode = DocXml.CreateElement("mf", "NEMONICO", "http://www.masteredi.com.mx/masfactura2")
            xmlAtt = DocXml.CreateAttribute("nombre")
            xmlAtt.Value = At
            NodGenerico.Attributes.Append(xmlAtt)

            Valor = DocXml.CreateTextNode(Val)
            NodGenerico.AppendChild(Valor)
            Nodo.AppendChild(NodGenerico)
        Catch ex As Exception

        End Try
    End Sub
#End Region
End Class
